package br.com.weysolucoes.controlador;

import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;
import br.com.weysolucoes.dto.UsuarioDTO;
import br.com.weysolucoes.managedBean.LoginManagedBean;

/**
 * Controlador utilizado especificamente para verificao de permisssoes de 
 * acesso a funcionalidades oferecidas pela aplicacao.
 *
 * @author Flavio Miranda
 */
public class ControladorAcesso {

  private boolean permissaoAdministrador;
  private boolean permissaoFuncionario;
  private boolean permissaoComum;

  public boolean isPermissaoAdministrador() {    
    HttpSession sessao = (HttpSession) 
            FacesContext.getCurrentInstance().getExternalContext().getSession(true);
    UsuarioDTO usuarioSessao = (UsuarioDTO) sessao.getAttribute(LoginManagedBean.USUARIO_SESSAO);
    
    if (usuarioSessao != null) {
      permissaoAdministrador  = (usuarioSessao.getCodPerfil() == UsuarioDTO.ADMINISTRADOR);
    } else {
      permissaoAdministrador = false;
    }
    return permissaoAdministrador;
    }

  public boolean isPermissaoFuncionario() {
    HttpSession sessao = (HttpSession) 
            FacesContext.getCurrentInstance().getExternalContext().getSession(true);
    UsuarioDTO usuarioSessao = (UsuarioDTO) sessao.getAttribute(LoginManagedBean.USUARIO_SESSAO);
    
    if (usuarioSessao != null) {
      permissaoAdministrador  = (usuarioSessao.getCodPerfil() == UsuarioDTO.ADMINISTRADOR);
      
      if (permissaoAdministrador) {
        permissaoFuncionario = true;
      } else {
        permissaoFuncionario  = (usuarioSessao.getCodPerfil() == UsuarioDTO.FUNCIONARIO);
      }
    } else {
      permissaoFuncionario = false;
    }
    return permissaoFuncionario;
  }

  public boolean isPermissaoComum() {
    HttpSession sessao = (HttpSession) 
            FacesContext.getCurrentInstance().getExternalContext().getSession(true);
    UsuarioDTO usuarioSessao = (UsuarioDTO) sessao.getAttribute(LoginManagedBean.USUARIO_SESSAO);
    
    if (usuarioSessao != null) {
      permissaoAdministrador  = (usuarioSessao.getCodPerfil() == UsuarioDTO.ADMINISTRADOR);
      permissaoFuncionario  = (usuarioSessao.getCodPerfil() == UsuarioDTO.FUNCIONARIO);
      
      if (permissaoAdministrador || permissaoFuncionario) {
        permissaoComum = true;
      } else {
        permissaoComum  = (usuarioSessao.getCodPerfil() == UsuarioDTO.CONVIDADO);
      }
    } else {
      permissaoComum = false;
    }
    return permissaoComum;
  }
  
  /**
   * Metodo utilizado para configurar o perfil de acesso do usuario logado as
   * funcionalidades da aplicacao.
   */
  public void configurarAcesso() {
    HttpSession sessao = (HttpSession) 
            FacesContext.getCurrentInstance().getExternalContext().getSession(true);
    UsuarioDTO usuarioSessao = (UsuarioDTO) sessao.getAttribute(LoginManagedBean.USUARIO_SESSAO);
    
    if (usuarioSessao != null) {
      
      Logger.getLogger("ControladorAcesso").log(Level.INFO, 
              ">>>>>>>>>>>>>> Usuário da sessão tem tipo {0}", usuarioSessao.getCodPerfil());
      
      permissaoAdministrador  = (usuarioSessao.getCodPerfil() == UsuarioDTO.ADMINISTRADOR);
      
      if (permissaoAdministrador) {
        permissaoFuncionario = true;
      } else {
        permissaoFuncionario  = (usuarioSessao.getCodPerfil() == UsuarioDTO.FUNCIONARIO);
        permissaoComum  = (usuarioSessao.getCodPerfil() == UsuarioDTO.CONVIDADO);
      }
    }
  }
}
